package com.frame.hander;

import java.sql.Date;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

import com.frame.util.DateFormatUtil;

/**
 * @author LRC
 * @createDate 2015年5月19日
 * @description 数值转换处理类
 */
public class ValueHander {
	
	public static Map<String,Integer> mapping = new HashMap<String,Integer>();
	
	//初始化参数
	static {
		mapping.put("c", 1);//字符串
		mapping.put("i", 2);//int
		mapping.put("f", 3);//浮点
		mapping.put("d", 4);//double
		mapping.put("b", 5);//bool
		mapping.put("date", 6);//日期
		mapping.put("dateTime", 7);//日期时间
	}
	/**
	 * @updateTeim 2015年6月8日下午10:51:05
	 * @description 获取In查询参数 (?,?,?) 
	 * @param val
	 * @param type
	 * @return
	 */
	public static String getInArg(Object val,String type){
		StringBuilder sb = new StringBuilder("(");
		if(val==null||"".equals(val.toString()))return null;
		String str = val.toString();
		String[] args = str.split(",");
		Integer i = mapping.get(type);
		if(i==null)return null;
		for(String arg : args){
			switch(i){
			case 2://整形
				sb.append(arg+",");
				break;
			case 1://字符串
				sb.append("'"+arg+"',");
				break;
			}
		}
		sb.replace(sb.length()-1, sb.length(), ")");
		
		return sb.toString();
	}
	/**
	 * 将给定的对象转换为指定的类型
	 * @param type
	 * @param val
	 * @return
	 */
	public static Object parseVal(Object val,String type){
		if(val==null)return null;
		String str = val.toString();
		Integer i = mapping.get(type);
		if(i==null){
			System.out.println("ValueHander -- not found this type :"+type);
			return null;
		}
		switch(i){
			case 1:return str;
			case 2:return Integer.parseInt(str);
			case 3:return Float.parseFloat(str);
			case 4:return Double.parseDouble(str);
			case 5:return Boolean.parseBoolean(str);
			case 6:
				java.util.Date date = DateFormatUtil.parseS(str);
				if(date==null)return null;
				java.sql.Date _date = new java.sql.Date(date.getTime());
				return _date;
			case 7:
				java.util.Date dateTime = DateFormatUtil.parseL(str);
				if(dateTime==null)return null;
				java.sql.Timestamp _dateTime = new java.sql.Timestamp(dateTime.getTime());
				return _dateTime;
			default:return val;
		}
	}
	
	/**
	 * 如果参数值为空，即没有该参数，则填充默认值
	 * 给定字符串数组字符串格式  name:type:value
	 * ps[0]参数名，ps[1]类型，ps[2]默认值
	 */
	public static void fillIfNull(JSONObject obj,String[] params){
		for(String p : params){
			if(p==null)continue;
			String[] ps = p.split(":");
			if(ps.length!=3)continue;
			Object v = obj.get(ps[0]);
			if(v==null){
				obj.put(ps[0], ValueHander.parseVal(ps[2], ps[1]));
			}
		}
	}
}
